#1 为了统计学生人数，可以给Student类增加一个类属性，每创建一个实例，该属性自动增加：
class Student(object):  #定义类
    count = 0
    def __init__(self, name):  #初始化
        self.name = name
        #Student.count = Student.count + 1
        Student.count += 1
def get_count(object):
    return object.count
#测试
if Student.count != 0:
    print('测试失败，当前实例数量应该为0')
else:
    Xiaoming = Student('Xiaoming')  #实例化对象
    if Student.count != 1:
        print('测试失败，当前实例数量应该为1')
    else:
        Xiaohong = Student('Xiaoming')
        if Student.count != 2:
            print('测试失败，当前实例数量应该为2')
        else:
            # 输入count数量为2， 即测试成功
            print('测试通过 Studeng:', Student.count )



import time
import functools
def metric(fn):  #设计装饰器
    @functools.wraps(fn)
    def wrapper(*args, **kw):
        start_time = time.time()  #记录开始时间
        va1 = fn(*args, **kw)                      # 执行一次程序
        end_time = time.time()    # 记录执行完程序的结束时间
        print('耗时：{:.4f}s'.format(end_time - start_time))   # 结束时间-开始时间为执行时间
        return va1
    return wrapper
@metric
def f(x, y):
    sum = 0
    for i in range(x):
        time.sleep(1)    #因函数执行较快显示0.0000秒，每次暂停1， 更好的看出执行时间
        sum +=  i*i + y*i + y*y
    print('f函数执行结果是', sum)   #f函数执行结果是 95

f(3, 5)         #测试  耗时 3.0016秒




import sys
import os
import time
import threading
#import termios
#import tty
import cv2
import pyprind
from PIL import Image  # 图片处理模块


# 基类
class CharFrame:
    ascii_char = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. "
    # 像素映射到字符，得到灰度值
    def pixelToChar(self, luminance):
        return self.ascii_char[int(luminance / 256 * len(self.ascii_char))]

    '''

        图片转字符画

    '''

class I2Char(CharFrame):
    result = None
    def __init__(self, path, limitSize=-1, fill=False, wrap=False):
        self.genCharImage(path, limitSize, fill, wrap)
    def genCharImage(self, path, limitSize=-1, fill=False, wrap=False):
        # 方法将图片转化成字符画
        # 给self.result 字符画字符串赋值
        im = Image.open(IMG)
        self.result += im.convert()

    def show(self, stream=2):

        if self.result is None:
            return

        if stream == 1 and os.isatty(sys.stdout.fileno()):

            self.streamOut = sys.stdout.write

            self.streamFlush = sys.stdout.flush

        elif stream == 2 and os.isatty(sys.stderr.fileno()):

            self.streamOut = sys.stderr.write

            self.streamFlush = sys.stderr.flush

        elif hasattr(stream, 'write'):

            self.streamOut = stream.write

            self.streamFlush = stream.flush

        self.streamOut(self.result)

        self.streamFlush()

        self.streamOut('\n')

    if __name__ == '__main__':

        import argparse
        #设置命令行参数

        parser = argparse.ArgumentParser()

        parser.add_argument('file', help='Video file or charvideo file')

        parser.add_argument('-e', '--export', nargs = '?', const = 'charvideo.txt', help='Export charvideo file')

        #获取参数

        args = parser.parse_args()

        v2char = V2Char(args.file)

        #如果有.txt字符动画文件，就直接导入

        if args.export:

            v2char.export(args.export)

            #否则正常转码播放

        v2char.play()

        '''

            通过命令行调用图片转字符画功能 ,命令行执行 Python v2char.py t3.jpeg,输出字符画

        '''

if __name__ == '__main__':
    import argparse

    #设置命令行参数

    parser = argparse.ArgumentParser()

    parser.add_argument('file')

    args = parser.parse_args()

    IMG = args.file

    Img = I2Char(args.file)

    Img.genCharImage()

    Img.show()







